home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Controls / Visual Basic Controls.iso / vbcontrol / intmail2 / ftpresum.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-07-27  |  6.4 KB  |  218 lines

  1. unit FTPResumeDemoMain;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ComCtrls, StdCtrls, ExtCtrls, Buttons, IniFiles, Mssocket, msFTP;
  8.  
  9. type
  10.   TResumeForm = class(TForm)
  11.     Panel1: TPanel;
  12.     LogMemo: TMemo;
  13.     StatusBar: TStatusBar;
  14.     Label1: TLabel;
  15.     ServerEdit: TEdit;
  16.     Label2: TLabel;
  17.     UserNameEdit: TEdit;
  18.     Label3: TLabel;
  19.     PasswordEdit: TEdit;
  20.     Label4: TLabel;
  21.     FileNameEdit: TEdit;
  22.     Label5: TLabel;
  23.     StartButton: TButton;
  24.     CancelButton: TButton;
  25.     RemoteDirectoryEdit: TEdit;
  26.     SpeedButton1: TSpeedButton;
  27.     msFTPClient1: TmsFTPClient;
  28.     OpenDialog: TOpenDialog;
  29.     ResumeButton: TButton;
  30.     Label7: TLabel;
  31.     OperationComboBox: TComboBox;
  32.     procedure StartButtonClick(Sender: TObject);
  33.     procedure OnLineTransferred(Sender: TObject; const TheLine: String);
  34.     procedure SpeedButton1Click(Sender: TObject);
  35.     procedure msFTPClient1Connected(Sender: TObject);
  36.     procedure msFTPClient1Connecting(Sender: TObject);
  37.     procedure msFTPClient1Disconnected(Sender: TObject);
  38.     procedure msFTPClient1DataTransferStart(Sender: TObject);
  39.     procedure msFTPClient1DataTransferTerminate(Sender: TObject);
  40.     procedure CancelButtonClick(Sender: TObject);
  41.     procedure ResumeButtonClick(Sender: TObject);
  42.     procedure FormCreate(Sender: TObject);
  43.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  44.     procedure msFTPClient1DataTransferProgress(Sender: TObject;
  45.       ByteCount: Longint);
  46.   private
  47.     { Private declarations }
  48.     IniFileName: string;
  49.     function GetFileSize(const FileName: string): LongInt;
  50.   public
  51.     { Public declarations }
  52.   end;
  53.  
  54. var
  55.   ResumeForm: TResumeForm;
  56.  
  57. implementation
  58.  
  59. {$R *.DFM}
  60.  
  61. procedure TResumeForm.StartButtonClick(Sender: TObject);
  62. begin
  63.   CancelButton.Enabled:=true;
  64.   ResumeButton.Enabled:=false;
  65.   StartButton.Enabled:=false;
  66.   try
  67.     msFTPClient1.Host:=ServerEdit.Text;
  68.     msFTPClient1.UserName:=UserNameEdit.Text;
  69.     msFTPClient1.Password:=PasswordEdit.Text;
  70.     msFTPClient1.Login;
  71.     if RemoteDirectoryEdit.Text<>'' then
  72.       msFTPClient1.CurrentDirectory:=RemoteDirectoryEdit.Text;
  73.     if OperationComboBox.ItemIndex=0 then {Upload}
  74.       msFTPClient1.StoreFile(FileNameEdit.Text,ExtractFileName(FileNameEdit.Text))
  75.     else {Download}
  76.       msFTPClient1.RetrieveFile(ExtractFileName(FileNameEdit.Text),FileNameEdit.Text);
  77.     msFTPClient1.Logout;
  78.   finally
  79.     CancelButton.Enabled:=false;
  80.     ResumeButton.Enabled:=true;
  81.     StartButton.Enabled:=true;
  82.   end;
  83. end;
  84.  
  85. procedure TResumeForm.OnLineTransferred(Sender: TObject;
  86.   const TheLine: String);
  87. begin
  88.   LogMemo.Lines.Add(TheLine);
  89. end;
  90.  
  91. procedure TResumeForm.SpeedButton1Click(Sender: TObject);
  92. begin
  93.   if FileNameEdit.Text<>'' then
  94.     OpenDialog.FileName:=FileNameEdit.Text;
  95.   if OpenDialog.Execute then
  96.     FileNameEdit.Text:=OpenDialog.FileName;
  97. end;
  98.  
  99. procedure TResumeForm.msFTPClient1Connected(Sender: TObject);
  100. begin
  101.   StatusBar.SimpleText:='Connected';
  102. end;
  103.  
  104. procedure TResumeForm.msFTPClient1Connecting(Sender: TObject);
  105. begin
  106.   StatusBar.SimpleText:='Connecting to the server';
  107. end;
  108.  
  109. procedure TResumeForm.msFTPClient1Disconnected(Sender: TObject);
  110. begin
  111.   StatusBar.SimpleText:='Disconnected';
  112. end;
  113.  
  114. procedure TResumeForm.msFTPClient1DataTransferStart(Sender: TObject);
  115. begin
  116.   StatusBar.SimpleText:='Opaning data connection';
  117. end;
  118.  
  119. procedure TResumeForm.msFTPClient1DataTransferTerminate(Sender: TObject);
  120. begin
  121.   StatusBar.SimpleText:='Data connection closed';
  122. end;
  123.  
  124. procedure TResumeForm.CancelButtonClick(Sender: TObject);
  125. begin
  126.   msFTPClient1.CancelDataTransfer;
  127. end;
  128.  
  129. function TResumeForm.GetFileSize(const FileName: string): LongInt;
  130. var
  131.   f: file;
  132. begin
  133.   AssignFile(f,FileName);
  134.   Reset(f,1);
  135.   try
  136.     Result:=FileSize(f);
  137.   finally
  138.     CloseFile(f);
  139.   end;
  140. end;
  141.  
  142. procedure TResumeForm.ResumeButtonClick(Sender: TObject);
  143. var
  144.   Marker: LongInt;
  145. begin
  146.   CancelButton.Enabled:=true;
  147.   ResumeButton.Enabled:=false;
  148.   StartButton.Enabled:=false;
  149.   try
  150.     msFTPClient1.Host:=ServerEdit.Text;
  151.     msFTPClient1.UserName:=UserNameEdit.Text;
  152.     msFTPClient1.Password:=PasswordEdit.Text;
  153.     msFTPClient1.Login;
  154.     if RemoteDirectoryEdit.Text<>'' then
  155.       msFTPClient1.CurrentDirectory:=RemoteDirectoryEdit.Text;
  156.     if OperationComboBox.ItemIndex=0 then {Upload}
  157.     begin
  158.       Marker:=msFTPClient1.GetFileSize(ExtractFileName(FileNameEdit.Text));
  159.       {Go slightly back, because some servers are returning the size occupied}
  160.       {by the file, not actual number of bytes}
  161.       Marker:=Marker-1024;
  162.       if Marker<0 then Marker:=0;
  163.       msFTPClient1.ResumeStoreFile(FileNameEdit.Text,ExtractFileName(FileNameEdit.Text),
  164.         Marker);
  165.     end
  166.     else {Download}
  167.     begin
  168.       Marker:=GetFileSize(FileNameEdit.Text);
  169.       msFTPClient1.ResumeRetrieveFile(ExtractFileName(FileNameEdit.Text),FileNameEdit.Text,
  170.         Marker);
  171.     end;
  172.     msFTPClient1.Logout;
  173.   finally
  174.     CancelButton.Enabled:=false;
  175.     ResumeButton.Enabled:=true;
  176.     StartButton.Enabled:=true;
  177.   end;
  178. end;
  179.  
  180. procedure TResumeForm.FormCreate(Sender: TObject);
  181. begin
  182.   IniFileName:=ChangeFileExt(ParamStr(0),'.ini');
  183.   with TIniFile.Create(IniFileName) do
  184.   try
  185.     OperationComboBox.ItemIndex:=ReadInteger('Setup','Operation',0);
  186.     ServerEdit.Text:=ReadString('Setup','Server','');
  187.     UserNameEdit.Text:=ReadString('Setup','User Name','');
  188.     PasswordEdit.Text:=ReadString('Setup','Password','');
  189.     RemoteDirectoryEdit.Text:=ReadString('Setup','Remote Directory','');
  190.     FileNameEdit.Text:=ReadString('Setup','File Name','');
  191.   finally
  192.     Free;
  193.   end;
  194. end;
  195.  
  196. procedure TResumeForm.FormClose(Sender: TObject; var Action: TCloseAction);
  197. begin
  198.   with TIniFile.Create(IniFileName) do
  199.   try
  200.     WriteInteger('Setup','Operation',OperationComboBox.ItemIndex);
  201.     WriteString('Setup','Server',ServerEdit.Text);
  202.     WriteString('Setup','User Name',UserNameEdit.Text);
  203.     WriteString('Setup','Password',PasswordEdit.Text);
  204.     WriteString('Setup','Remote Directory',RemoteDirectoryEdit.Text);
  205.     WriteString('Setup','File Name',FileNameEdit.Text);
  206.   finally
  207.     Free;
  208.   end;
  209. end;
  210.  
  211. procedure TResumeForm.msFTPClient1DataTransferProgress(Sender: TObject;
  212.   ByteCount: Longint);
  213. begin
  214.   StatusBar.SimpleText:=IntToStr(ByteCount)+' bytes transferred';
  215. end;
  216.  
  217. end.
  218.